<?php
/**
 * 系統名稱: Lotto 系統
 * 檔案說明: 專案管理-修改
 * $Author$
 * $Id$
 *
 */
if (!defined("Password_lib_include")){
    define("Password_lib_include", 1);
	include_once(__Modules_Path."/LogRecord.lib.php");
	include_once(__Common_Path."/SysParam.inc.php");

/**
 * 欲更改『其下層』新密碼，必須通過原則檢測，若成功則更改密碼
 * 1. 新密碼 請填寫 6 碼以上！
 * 2. 新密碼 和 密碼確認 不一樣！(確認大小是否相同)
 * 3. 新密碼 請自訂半形 a-z, A-Z, 0-9, @, _
 * 4.密碼每個字元不能相同！
 * 
 * @param	strPrePWD 原用密碼
 * @param	strNewPWD 新密碼
 * @param	strConfirmPWD 確認密碼
 * @param	strOldPWD 使用者輸入原用密碼，以確認本人
 * @param	intUserID 使用者序號
 * @param	strAccount 使用者帳號
 * @param	strName 使用者名稱
 * @param	arrAlert 提示文字陣列
 * @return	回傳陣列 arrCon
 * Index -> err : true -> 更改不成功， false -> 更改成功
 * Index -> message : 更改狀況訊息
 */
	function UpdatePassword($strPrePWD, $strNewPWD, $strOldPWD, $strConfirmPWD, $intUserID, $strAccount, $strName, $arrAlert){
		$strPrePWD = strtolower($strPrePWD);
		$strNewPWD = strtolower($strNewPWD);
		$strOldPWD = strtolower($strOldPWD);
		$strConfirmPWD = strtolower($strConfirmPWD);
		$arrCon["err"] = false;
		if($strOldPWD != $strPrePWD){
			$arrCon["err"] = true;
			$arrCon["message"] = $arrAlert["PWD_alert4"];//"原密碼輸入錯誤，請重新填寫！";
			AddData_Log($intUserID, "使用者原密碼錯誤", "使用者(".$strAccount." -- ".$strName.")嘗試更改密碼，原密碼輸入錯誤！");
		}elseif(strtolower($strAccount) == $strNewPWD){
			$arrCon["err"] = true;
			$arrCon["message"] = $arrAlert["PWD_alert10"];//"會員帳號不能和密碼相同！";
		}elseif(strlen($strNewPWD) < 6 && strlen($strNewPWD) >= 0){
			$arrCon["err"] = true;
			$arrCon["message"] = $arrAlert["PWD_alert1"];//"新密碼 請填寫 6 碼以上！";
		}elseif($strPrePWD == $strNewPWD){
			$arrCon["err"] = true;
			$arrCon["message"] = $arrAlert["PWD_alert7"];//"新密碼 和 舊密碼不能相同！";
		}elseif($strConfirmPWD != $strNewPWD){
			$arrCon["err"] = true;
			$arrCon["message"] = $arrAlert["PWD_alert2"];//"新密碼 和 密碼確認 不一樣！(確認大小是否相同)";
		}elseif(!preg_match("/^[a-zA-Z0-9@_]{0,50}$/",$strNewPWD)){
			$arrCon["err"] = true;
			$arrCon["message"] = $arrAlert["PWD_alert3"];//"新密碼 請自訂半形 a-z, A-Z, 0-9, @, _";
		}elseif(!isSamePassword($strNewPWD)){
			$arrCon["err"] = true;
			$arrCon["message"] = $arrAlert["PWD_alert8"];//"密碼每個字元不能相同！";
		}elseif(FindOldPasswordNo($intUserID, $strNewPWD)){
			$arrCon["err"] = true;
			$arrCon["message"] = $arrAlert["PWD_alert9"];//"此密碼您已經使用過了！";
		} //if($strOldPWD != $strPrePWD){
		
		if($arrCon["err"] == false)$arrCon = UpdatePWD($strPrePWD, $strNewPWD, $intUserID, $strAccount." -- ".$strName, $arrAlert);

		return $arrCon;
	}

/**
 * 欲更改『其下層』新密碼，必須通過原則檢測，若成功則更改密碼
 * 1. 新密碼 請填寫 6 碼以上！
 * 2. 新密碼 和 密碼確認 不一樣！(確認大小是否相同)
 * 3. 新密碼 請自訂半形 a-z, A-Z, 0-9, @, _
 * 4.密碼每個字元不能相同！

 * @param	strNewPWD 新密碼
 * @param	strConfirmPWD 確認密碼
 * @param	intUserID 使用者序號
 * @param	strAccount 使用者帳號
 * @param	strName 使用者名稱
 * @param	arrAlert 提示文字陣列
 * @return	回傳陣列 arrCon
 * Index -> err : true -> 更改不成功， false -> 更改成功
 * Index -> message : 更改狀況訊息
 */
	function UpdateChildrenPassword($strNewPWD, $strConfirmPWD, $intUserID, $strAccount, $strName, $arrAlert){
		$strNewPWD = strtolower($strNewPWD);
		$strConfirmPWD = strtolower($strConfirmPWD);
		$arrCon["err"] = false;
		if(strlen($strNewPWD) < 6 && strlen($strNewPWD) >= 0){
			$arrCon["err"] = true;
			$arrCon["message"] = $arrAlert["PWD_alert1"];	//"新密碼 請填寫 6 碼以上！";
		}elseif(strtolower($strAccount) == $strNewPWD){
			$arrCon["err"] = true;
			$arrCon["message"] = $arrAlert["PWD_alert10"];	//"會員帳號不能和密碼相同！";
		}elseif($strConfirmPWD != $strNewPWD){
			$arrCon["err"] = true;
			$arrCon["message"] = $arrAlert["PWD_alert2"];	//"新密碼 和 密碼確認 不一樣！(確認大小是否相同)";
		}elseif(!preg_match("/^[a-zA-Z0-9@_]{0,50}$/", $strNewPWD)){
			$arrCon["err"] = true;
			$arrCon["message"] = $arrAlert["PWD_alert3"];	//"新密碼 請自訂半形 a-z, A-Z, 0-9, @, _";
		}elseif(!isSamePassword($strNewPWD)){
			$arrCon["err"] = true;
			$arrCon["message"] = $arrAlert["PWD_alert8"];	//"密碼每個字元不能相同！";
		}

		//找出原用密碼
		$strPrePWD = FindMemPassword($intUserID);
		if(!$strPrePWD)return false;
		$strPrePWD = strtolower($strPrePWD);
		//通過原則檢測，更改密碼
		if($arrCon["err"] == false)$arrCon = UpdatePWD($strPrePWD, $strNewPWD, $intUserID, $strAccount." -- ".$strName, $arrAlert);

		return $arrCon;
	}

/**
 * 更改使用者欲設新密碼，並記錄原用密碼
 * @param	strPrePWD 原用密碼
 * @param	strNewPWD 新密碼
 * @param	intUserID 使用者序號
 * @param	strAccount 使用者帳號和密碼字串 ("Account - Name")
 * @param	arrAlert 提示文字陣列
 * @return	回傳陣列 arrCon
 * Index -> err : true -> 更改不成功， false -> 更改成功
 * Index -> message : 更改狀況訊息
 */
	function UpdatePWD($strPrePWD, $strNewPWD, $intUserID, $strAccount, $arrAlert){
		global $_ConnMaster;
		//更改使用者欲設新密碼
		$strSQL = "update `bet_Member` set Password = '".$strNewPWD."', ChangePWDDate = CURRENT_DATE() where ID = ".$intUserID;
		if(PMA_mysql_query($strSQL, $_ConnMaster)){
			$arrCon["err"] = false;
			$arrCon["message"] = $arrAlert["PWD_alert5"];	//"密碼更改已完成！<br />請記住您更改後的密碼！";
			AddData_Log($intUserID, "使用者更改密碼", "使用者(".$strAccount.")更改密碼完成！");
			//記錄原用密碼
			$strSQL = "insert into `bet_OldPassword`(MemID,PWD,ChangeDate,ChangeTime) values(".$intUserID.",'".$strPrePWD."',CURRENT_DATE(),CURRENT_TIME())";
			PMA_mysql_query($strSQL, $_ConnMaster);
		}else{
			$arrCon["err"] = true;
			$arrCon["message"] = $arrAlert["PWD_alert6"];	//"密碼更改失敗！";
		}
		return $arrCon;
	}

/**
 * 檢查傳入密碼，其字串是否相同字元構成
 * @param	strPassword 密碼
 * @return	不相同 true ，否 false
 */
	function isSamePassword($strPassword){
		$c = substr($strPassword, 0, 1);
		for($i = 1; $i < strlen($strPassword); $i++){
			if($c != substr($strPassword, $i, 1))return true;
		}
		return false;
	}

/**
 * 找出使用者欲更改新密碼，是否在系統設定時間內使用過
 * 系統參數
 * $_KSysParam[OldPWDExistDays] -> 舊密碼存在天數
 * 傳入參數
 * @param	intUserID 使用者序號
 * @param	strPassword 欲更改之新密碼
 * @return	使用過傳回 true ，否 false
 */
	function FindOldPasswordNo($intUserID, $strPassword){
		global $_KSysParam, $_Conn, $$_Conn;

		$strDate = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - $_KSysParam[OldPWDExistDays], date("Y")));
		$strSQL = "select count(*) as no from `bet_OldPassword` where MemID = ".$intUserID." and PWD = '".$strPassword."' and ChangeDate >= '".$strDate."'";
		if($RS = PMA_mysql_query($strSQL, $$_Conn)){
			$Rows = PMA_mysql_fetch_object($RS);
			@mysql_free_result($RS);
			if($Rows -> no > 0)return true;
		}
		return false;
	}


/**
 * 找出使用者密碼
 * @param	intUserID 使用者序號
 * @return	成功傳回 密碼 String ，否 false
 */
	function FindMemPassword($intUserID){
		global $_Conn, $$_Conn;
		$strSQL = "select Password from `bet_Member` where ID = ".$intUserID;
		if($RS = PMA_mysql_query($strSQL, $$_Conn)){
			if(PMA_mysql_num_rows($RS) > 0){
				$Rows = PMA_mysql_fetch_object($RS);
				@mysql_free_result($RS);
				return $Rows -> Password;
			}
		}
		return false;
	}

//-------------------------------------------------------//
//Password_lib End
}
?>